function mergeArea(o) {
	var a = {
		data: {
			province: '',
			city: '',
			area: '',
			provinces: {},
			cities: {},
			areas: {},
			areaMap: {}
		},
		watch: {
			province: function (nv, ov) {
				var o = this.areaMap[this.province], cs = {}, k;
				this.area = '';
				if (Object.keys(o).length == 2) {
					this.cities = { '01': this.provinces[nv] };
					this.city = '01';
					return;
				}
				for (k in o) cs[k] = o[k]['00'];
				delete cs['00'];
				this.cities = cs;
			},
			city: function (nv, ov) {
				var o = this.areaMap[this.province][this.city], as = {}, k;
				for (k in o) as[k] = o[k];
				delete as['00'];
				this.areas = as;
			}
		},
		methods: {
			areaCode: function () {
				if (!this.province) return '';
				var a = this.area || '00', c = this.city || '00';
				return this.province + c + a;
			},
			areaName: function () {
				if (!this.province) return '';
				var o = this.areaMap[this.province];
				var o1 = o[this.city] || {};
				return o['00']['00'] + (o1['00'] || '') + (o1[this.area] || '');
			},
			getAreaData: function () {
				axios.get('https://passer-by.com/data_location/list.json').then(function (res) {
					var data = res.data, o = {}, k, p, c, a, ps = {};
					for (k in data) {
						p = k.slice(0, 2), c = k.slice(2, 4), a = k.slice(4, 6);
						if (!(p in o)) o[p] = {};
						if (!(c in o[p])) o[p][c] = {};
						if (!(a in o[p][c])) o[p][c][a] = data[k];
					}
					for (k in o) ps[k] = o[k]['00']['00'];
					this.areaMap = o;
					this.provinces = ps;
				}.bind(this));
			},
		}
	};

	['data', 'methods', 'watch'].forEach(function (it) {
		if (it in a) for (var i in a[it]) o[it][i] = a[it][i];
	});

	return o;
}


